exception Requete_en_cours
exception Pas_de_requete

(* La réponse d'une requête. Erreur : si je suis déconnecté. *)
type reponse =
  | Accepte
  | Refuse
  | Erreur 
type joueur
val est_connecte: joueur -> bool
val string_of_joueur: joueur -> string
val joueurs_disponibles: joueur -> string list
val mes_adversaires: joueur -> string array
val joue: joueur -> bool (*S'il joue*)

val make: unit -> joueur
val requete_en_cours: joueur -> bool
val traiter_reponse: joueur -> (reponse -> unit) -> unit
(* Appelle la fonction lors de la réponse à cette requête. Doit être appelé après assimiler_requete_* sous peine de se prendre Pas_de_requete en pleine tronche.*)
val assimiler_requete_deconnecter: joueur -> unit
(* Déconnecte le joueur et annule la requête. *)
val assimiler_requete_identifier: joueur -> string -> unit
(* Enregistre la demande du joueur. Lève Requete_en_cours si une *)
(* requête est déjà en cours. *)
val assimiler_requete_inviter: joueur -> string list -> unit
val assimiler_information_erreur: joueur -> unit
val assimiler_information_connexion: joueur -> unit
val assimiler_information_deconnexion: joueur -> unit
val assimiler_information_entree: joueur -> string -> unit
(* Si c'est moi, ma requête est acceptée. *)
val assimiler_information_sortie: joueur -> string -> unit
val assimiler_information_noms: joueur -> string array -> unit

val repondre_aux: joueur -> reponse -> unit
(* ZONE DANGEREUSE: ne PAS utiliser, sauf dans son homonyme *)
(* directement parent. Sert à répondre à la requête *)
(* directement. Normalement, il suffit de passer par les fonctions *)
(* assimiler_information_truc. *)
